﻿#ifndef CUSTOMFILEPARSER_H
#define CUSTOMFILEPARSER_H

#include "Common/common.h"

#include <QObject>
#include <mutex>

class CustomFileParser : public QObject
{
    Q_OBJECT
public:
    explicit CustomFileParser(QObject *parent = nullptr);

    void parse(const QString &path);

    void exportPointData(const QString& fileName, const QList<PointDetail>& detail);

private:
    void threadParse(const QString &path);

    // 解析 tiff 图片的位置信息
    void parseGeotiff(const QString &path);

    // 导出的文本格式
    void parseVersion0(std::ifstream &fileDescripter);

    // 注释 文件介绍
    void parseVersion1(int utmZone, std::ifstream &fileDescripter);

    // 每行都是 GPRMC 开头的格式
    void parseVersion2(std::ifstream &fileDescripter);

    // 每行都是 GPGGA 开头的格式
    void parseVersion3(std::ifstream &fileDescripter);

    // 混合各种格式，取其中的 PTSAG
    void parseVersion4(std::ifstream &fileDescripter);

    // Phins6000DVL_Position 格式
    void parseVersion5(std::ifstream &fileDescripter);

    // Excel 中的第一种 xlsx 格式
    void parseVersion6(const QString &path);

    // Excel 中的第一种 xls 格式
    void parseVersion7(const QString &path);

    void threadExportPointData(const QString& fileName, const QList<PointDetail>& detail);

    // 是否是默认导出格式
    bool isDefaultVersion(const QString &line);

private:
    QString mCurrentPath;

    // 正在处理文件
    bool mParseFlag = false;

    // 线程锁
    std::mutex mMutex;
};

#endif // CUSTOMFILEPARSER_H
